The Ada community has proposed a number of explanations for the relative lack of success of Ada vis-a-vis of C and more recently C<#52#>++<#52#>, in spite of the clear superiority of Ada as a language for software engineering. At least one reason for the slow spread of Ada through the software community has been the absence of a cheap (or even free) high-quality compiler that can run on a variety of platforms and is usable both for training and serious software construction. The issue of training is a particularly critical one: students (and universities) cannot afford expensive programming environments, and the choice of programming languages for teaching is often ruled by cost considerations. The widespread use of C is in part due to the ubiquitousness of UNIX. The recent successes of C<#53#>++<#53#> are at least in part attributable to the availability of Turbo-C<#54#>++<#54#> on PC's, and of course G<#55#>++<#55#> (the GCC C<#56#>++<#56#> compiler) on UNIX platforms.
The imminent introduction of Ada9X presents us with a new opportunity. The
language [#rm-9x#
The GNAT project aims to produce such a compiler. GNAT (an acronym for
GNU NYU Ada Translator), is a front-end and runtime system for Ada9X that
uses the successful GCC back-end as a retargettable code generator. GNAT
is thus part of the GNU software, and is distributed according to the
guidelines of the Free Software Foundation. GNAT will be a complete compiler,
but will not be validaded by New York University. In fact, GNAT will be
available before validation procedures for Ada9X compilers are completed,
because timeliness is crucial to its mission. Preliminary versions of GNAT,
albeit very incomplete, are already being distributed, and are contributing
to the diffusion of the language. The availability of sources for the system
is allowing language designers and implementors to participate in the
writing of GNAT itself. Compiler constructors are also benefiting from the
existence of a reference implementation for new language constructs. We
give below information on how to obtain GNAT and how to participate in
the community effort of completing and improving it.
The next section describes the GCC compiler system. Next we summarize the
structure of GNAT. Following sections discuss some details of the front-end
and code generator. We then present what is probably the most
innovative aspect of GNAT, namely the library mechanism. We then discuss the
binder, and conclude with a status report on the completion and
performance of the system.